package com.example.sxt_practise.thread.ThreadEightLock;

import java.util.concurrent.TimeUnit;

/**
 * 1.标准情况下,那个线程先打印,答案是:A,因为A先获取到了锁
 * 2.sendMsg()方法延迟4秒,还是A先打印
 * @author gaofeng
 * @date 2022年06月03日 0:24
 */
public class Test1 {
    public static void main(String[] args) {
        Phone phone = new Phone() ;

        // 两个线程，谁先拿到锁谁先执行
        new Thread(phone::sendMsg, "A").start();

        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        new Thread(phone::call,"B").start();
    }
}


class Phone {
    /**
     * synchronized锁的是方法的调用者
     * 两个方法是同一个锁,谁先拿到谁执行
     */
    public synchronized void sendMsg() {
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("发送短信！");
    }

    public synchronized void call() {
        System.out.println("打电话！");
    }

    /**
     * 不适同步方法，不受锁的影响，比上面两个方法先执行
     */
    public  void sayHello() {
        System.out.println("say hello！");
    }
}
